﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<assert.h>
//int main()
//{
//	int a[5][5];
//	int(*p)[4];
//	p = a;
//	printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
//	return 0;
//}
//
//int main()
//{
//	char* a[] = { "work","at","alibaba" };
//	char** pa = a;
//	pa++;
//	printf("%s\n", *pa);
//	return 0;
//}
//
//int main()
//{
//	char str[] = { "I Am A baba" };
//	int i = 0;
//	while (str[i] != '\0')
//	{
//		if (isupper(str[i]))
//			str[i] = tolower(str[i]);
//		i++;
//
//	}
//	printf("%s", str);
//	return 0;
//}
//
//my_strlen的模拟实现
//1.递归
//int my_strlen(const char* p)
//{
//	if (*p == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(p + 1);
//}
//int main()
//{
//	char str[] = { "abc" };
//	int length = strlen(str);
//	printf("%d", length);
//	return 0;
//}
//2.计数器
//int my_strlen(const char* p)
//{
//	int count = 0;
//	while (*p != '\0')
//	{
//		count++;
//		p++;
//	}
//	return count;
//}
//int main()
//{
//	char str[] = { "abc" };
//	int length = strlen(str);
//	printf("%d", length);
//	return 0;
//}
//3.指针-指针
//int my_strlen(const char* p)
//{
//	char* p2 = p;
//	while (p != '\0')
//	{
//		p++;
//	}
//	return p - p2;
//}
//int main()
//{
//	char str[] = { "abc" };
//	int length = strlen(str);
//	printf("%d", length);
//	return 0;
//}
//
//int main()
//{
//	char str1[] = { "ebc" };
//	char str2[] = { "bbc" };
//	int ret = strcmp(str1, str2);
//	printf("%d ", ret);
//	return 0;
//}
//
//strcpy模拟实现
//char* my_strcpy(char* src, char* dest)
//{
//	assert(src != NULL);
//	assert(dest != NULL);
//	char* ret = dest;
//	while (*dest++ = *src++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char str1[] = { "abc" };
//	char str2[20] = { "xxxxxxxxxxxxxxx" };
//	my_strcpy(str1, str2);
//	printf("%s", str2);
//	return 0;
//}
//
//strcat的模拟实现
//char* my_strcat(char* src, char* dest)
//{
//	char* ret = dest;
//	//找到'\0'
//	while (*dest)
//		dest++;
//	//拷贝
//	while (*dest++ = *src++)
//		;
//	return ret;
//}
//int main()
//{
//	char str1[] = { "abc" };
//	char str2[20] = { "xxxx" };
//	my_strcat(str1, str2);
//	printf("%s", str2);
//	return 0;
//}
//
//strcmp的模拟实现。
//int my_strcmp(const char* p1, const char* p2)
//{
//	assert(p1 && p2);
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//			return 0;
//		p1++;
//		p2++;
//	}
//	return *p1 - *p2;
//
//}
//int main()
//{
//	char str1[] = { "abc" };
//	char str2[] = { "bbc" };
//	int ret = my_strcmp(str1, str2);
//	printf("%d ", ret);
//	return 0;
//}
//
//char* my_strstr(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	if (*str2 == '\0')
//		return (char*)str1;
//	const char* s1 = str1;
//	const char* s2 = str2;
//	const char* cru = str1;
//	while (*cru)
//	{
//		s1 = cru;
//		s2 = str2;
//		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2);
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//			return cru;
//		cru++;
//	}
//}
//int main()
//{
//	char str1[] = { "abc" };
//	char str2[] = { "bc" };
//	char* ret = my_strstr(str1, str2);
//	printf("%s ", ret);
//	return 0;
//}
//
//int main()
//{
//	char str[] = { "sshyioo@outlook.com" };
//	char str2[20] = { 0 };
//	strcpy(str2, str);
//	const char* sep = "@.";
//	char* ret = NULL;
//	for (ret = strtok(str2, sep); ret != NULL; ret = strtok(NULL, sep))
//		printf("%s \n", ret);
//		//printf("%s\n", ret);
//		//ret = strtok(NULL, sep);
//		//printf("%s\n", ret);
//		//ret = strtok(NULL, sep);
//		//printf("%s\n", ret);
//		//ret = strtok(NULL, sep);
//		//printf("%s\n", ret);
//}
//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		//printf("%s", strerror(errno));
//		perror("fopen");
//		return 1;
//	}
//	return 0;
//}
//
//int main()
//{
//	int a[3][2] = { (0,1),(2,3),(4,5) };
//	int* p;
//	p = a[0];
//	printf("%d", p[0]);
//	return 0;
//}
//
//union Un1
//{
// char c[5];
// int i;
//};
//union Un2
//{
//	short c[7];
//	int i;
//};
//int main()
//{
//	//下⾯输出的结果是什么？
//	printf("%d\n", sizeof(union Un1));
//	printf("%d\n", sizeof(union Un2));
//	return 0;
//}
//
//struct giftlist
//{
//	int stock_number;
//	double price;
//	int item_type;
//	union 
//	{
//		struct 
//		{
//			char book_name[20];
//			char writer[20];
//			int pages;
//		}book;
//		struct 
//		{
//			char design[30];
//		}cup;
//		struct 
//		{
//			char design[30];
//			int colors;
//			int sizes;
//		}shirt;
//	}item;
//};
//int main()
//{
//	struct giftlist  book= { 0 };
//	struct giftlist  cup = { 0 };
//	struct giftlist  shirt = { 0 };
//	printf("%d "
//		, book.stock_number
//		, book.price
//		, book.item_type
//		, book.item.book.book_name
//		, book.item.book.pages
//		, book.item.book.writer);
//	printf("%d "
//		, cup.stock_number
//		, cup.price
//		, cup.item_type
//		, cup.item.cup.design);
//	printf("%d "
//		, shirt.item
//		, shirt.price
//		, shirt.stock_number
//		, shirt.item.shirt.colors
//		, shirt.item.shirt.design
//		, shirt.item.shirt.sizes);
//	return 0;
//}
//
//void* my_memcpy(void* scr,void* dest,int num)
//{
//	void* ret = dest;
//	assert(scr && dest);
//	while (num--)
//	{
//		*(char*)dest = *(char*)scr;
//		((char*)dest)++;//要加（）在++前！！！
//		((char*)scr)++;//要加（）在++前！！！
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	my_memcpy(arr, arr2, 5 * sizeof(int));
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	return 0;
//}
//
//void* my_memmove(void* dest, void* src, int num)
//{
//	assert(dest && src);
//	if (dest >= src)
//	{
//		while (num--)
//		{
//			*((char*)dest+num) = *((char*)src + num);
//		}
//	}
//	else
//		if (dest < src)
//		{
//			while (num--)
//			{
//				*(char*)dest = *((char*)src);
//				((char*)dest)++;
//				((char*)src)++;
//			}
//		}
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6};
//	//my_memmove(arr+1, arr, 3 * sizeof(int));
//	my_memmove(arr, arr+1, 3 * sizeof(int));
//
//	int i = 0;
//	for (i = 0; i < 6; i++)
//	{
//		printf("%d\n", arr[i]);
//	}
//	return 0;
//}
//
//int main()
//{
//	int arr[5] = { 1,1,1,1,1 };
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//
//典中典啊！！！！
//int main()
//{
//	int n = 0x11223344;//代表一个字节
//	return 0;
//}
// 
//my_strlen的模拟实现
//strcpy模拟实现
//strcat的模拟实现
//strcmp的模拟实现
//strtok
//strerror
//商品清单
//my_memcpy
//my_memmove